For an increasing number of modern programming languages and environments including but not limited to JAVA, Microsoft's .NET and scripting languages, just-in-time (JIT) compilation is becoming more common. Traditionally, computer programs were either statically compiled during development time or interpreted at run time. Interpreted computer programs are decoded and immediately executed. Statically compiled code is translated into machine code during development time to create an executable file which is then deployed and executed for multiple executions. A JIT compiler translates code during execution and caches the translated code for the lifetime of the process.
While JIT compilation can improve the runtime performance of computer programs in comparison to interpreted programs, JIT compilation can be associated with runtime overhead. JIT compilation can be responsible for a considerable part of start-up time because at start-up a large number of methods are often executed for the first time in the process. In a pure JIT compiled environment, the first time code is executed, it has to be JIT compiled; hence, there can be a time lag or latency between the point at which a user initiates a program that is JIT compiled and the point at which the program becomes responsive to the user. This lag time is called start-up latency. JIT compilation aims to attain the performance of static compilation, while retaining the benefits of interpretation. JIT compilation allows code that is portable to be deployed. JIT compilation enables environment-specific code generation including generating code that is specific to the target architecture and to security settings.